home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / lib / picture.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-07-01  |  2.6 KB  |  119 lines

  1. #include "jpg.h"
  2.  
  3. class FLY_API picture;
  4. class FLY_API textcache;
  5. class FLY_API textcacheGL;
  6.  
  7. extern FLY_API textcache *tc;
  8. extern FLY_API int textfilter;
  9. extern FLY_API int mipmap;
  10.  
  11. class FLY_API picture
  12. {
  13.     public:
  14.  
  15.         char name[256];
  16.  
  17.         int sx,sy,bytespixel,size;
  18.  
  19.         unsigned char **buf;
  20.  
  21.     picture();
  22.     virtual ~picture();
  23.  
  24.     int  LoadTGA(char *file);
  25.     int  SaveTGA(char *file);
  26.     int  LoadPIC(char *file);
  27.     int  LoadJPG(char *file);
  28.  
  29.     int  CreatePicture32(int xd,int yd);
  30.     int  CreatePicture24(int xd,int yd);
  31.     int  CreateNormalMap(float scale);
  32.     void FreePicture(void);
  33. };
  34.  
  35. class FLY_API textcache
  36. {
  37. public:
  38.     int curpic[MAX_TEXTURE_UNITS];
  39.     int npic,curtextunit;
  40.  
  41.     virtual void use(int pic=-1,int textunit=0)=0;
  42.     virtual void use_triangles(int pic=-1,int textunit=0)=0;
  43.     virtual void init(int np,picture **pic)=0;
  44.     
  45.     virtual int add_picture(int sx,int sy,int bytespixel,unsigned char *lm)=0;
  46.     virtual void update_picture(int picnum,int sx,int sy,int bytespixel,unsigned char *buf)=0;
  47.     virtual void update_sub_picture(int picnum,int x,int y,int sx,int sy,int bytespixel,unsigned char *buf)=0;
  48.  
  49.     textcache() 
  50.     { 
  51.         memset(curpic,-1,sizeof(int)*MAX_TEXTURE_UNITS);
  52.         npic=0; 
  53.         curtextunit=0;
  54.     };
  55.         
  56.     virtual ~textcache() { };
  57. };
  58.  
  59. class FLY_API textcacheGL : public textcache
  60. {
  61.     void reset();
  62.     void load_tex(int pic,int sx,int sy,int bytespixel,unsigned char *buf);
  63.     void free_tex(int pic);
  64.  
  65. public:
  66.     textcacheGL();
  67.     ~textcacheGL();
  68.  
  69.     unsigned *tex;
  70.     
  71.     int add_picture(int sx,int sy,int bytespixel,unsigned char *buf);
  72.     void update_picture(int picnum,int sx,int sy,int bytespixel,unsigned char *buf);
  73.     void update_sub_picture(int picnum,int x,int y,int sx,int sy,int bytespixel,unsigned char *buf);
  74.  
  75.     inline void use(int pic=-1,int textunit=0)
  76.     {
  77.     if (curpic[textunit]!=pic)
  78.         {
  79.         if (curtextunit!=textunit)
  80.             {
  81.             glActiveTextureARB(GL_TEXTURE0_ARB+textunit);
  82.             curtextunit=textunit;
  83.             }
  84.         if (pic==-1)
  85.             glDisable(GL_TEXTURE_2D);
  86.         else 
  87.             {
  88.             glEnable(GL_TEXTURE_2D);
  89.             glBindTexture(GL_TEXTURE_2D,tex[pic]);
  90.             }
  91.         curpic[curtextunit]=pic;
  92.         }
  93.     }
  94.     inline void use_triangles(int pic=-1,int textunit=0)
  95.     {
  96.     if (curpic[textunit]!=pic)
  97.         {
  98.         glEnd();
  99.         if (curtextunit!=textunit)
  100.             {
  101.             glActiveTextureARB(GL_TEXTURE0_ARB+textunit);
  102.             curtextunit=textunit;
  103.             }
  104.         if (pic==-1)
  105.             glDisable(GL_TEXTURE_2D);
  106.         else 
  107.             {
  108.             glEnable(GL_TEXTURE_2D);
  109.             glBindTexture(GL_TEXTURE_2D,tex[pic]);
  110.             }
  111.         curpic[curtextunit]=pic;
  112.         glBegin(GL_TRIANGLES);
  113.         }
  114.     }
  115.  
  116.     void init(int np,picture **pic);
  117. };
  118.  
  119.